Os computadores não compreendem diretamente as linguagens de programação; elas precisam ser convertidas para a linguagem de máquina, composta apenas por 0s e 1s (binário), que é a única linguagem que o computador entende. Dependendo da linguagem de programação, essa conversão pode ser feita por meio de compilação ou interpretação.
Linguagens de programação compiladas traduzem o código-fonte para código de máquina antes da execução do programa. Um compilador realiza essa conversão, gerando instruções diretamente compreensíveis pela arquitetura da máquina alvo. Isso resulta em uma execução mais eficiente e rápida, pois as instruções já foram processadas e otimizadas antes da execução.
Por outro lado, linguagens de programação interpretadas traduzem o código-fonte para código de máquina durante a execução. Um interpretador analisa o código linha por linha, tornando o processo mais lento em comparação com a compilação. No entanto, a interpretação oferece maior portabilidade, permitindo a execução do mesmo código-fonte em diferentes sistemas operacionais e arquiteturas, desde que haja um interpretador disponível.
Algumas linguagens, como Python e JavaScript (JS), usam uma abordagem intermediária. O código-fonte é compilado para bytecode, uma representação binária das instruções que uma máquina virtual específica pode entender. Em seguida, a máquina virtual executa o bytecode, proporcionando portabilidade e eficiência sem a necessidade de interpretar o código linha por linha.
O bytecode permite a aplicação da técnica de compilação Just-In-Time (JIT), que ocorre durante a execução do bytecode. Um compilador JIT traduz partes do código em código de máquina otimizado para a arquitetura específica do computador, melhorando significativamente o desempenho. Esse código de máquina é armazenado em cache para reutilização em futuras execuções do mesmo trecho de código, evitando a necessidade de recompilação repetitiva.
A compilação JIT também permite que a linguagem de programação forneça uma combinação de portabilidade e eficiência, pois o mesmo código-fonte pode ser executado em diferentes plataformas, mas o compilador JIT pode gerar código de máquina otimizado para cada plataforma específica.
Para este curso, utilizaremos a linguagem de programação JavaScript. JavaScript é amplamente popular por sua flexibilidade e diversidade de aplicações, como desenvolvimento de websites, aplicativos móveis e desktop. É executado tanto do lado do cliente (navegadores) quanto do lado do servidor (Node.js), o que o torna uma ferramenta poderosa para desenvolvimento de software moderno.
As páginas web utilizam HTML, CSS e JavaScript. Navegadores modernos já vêm com um interpretador de JavaScript embutido. Para executar códigos JavaScript, acesse as Ferramentas do Desenvolvedor do seu navegador (na maioria dos navegadores, use a tecla F12) e abra a aba "Console". Esta aba é um terminal interativo para inserir e executar comandos JavaScript.
Podemos criar uma página web simples com código HTML e Javascript e abri-la no navegador para ver o código executando:
<input type="number" placeholder="Digite um número">
<input type="number" placeholder="Digite outro número">
<button onclick="somar()">Somar!</button>
<p></p>
<script>
function somar() {
document.querySelector("p").textContent =
Number(document.querySelectorAll("input")[0].value) +
Number(document.querySelectorAll("input")[1].value)
}
</script>
Para desenvolver em JavaScript, vamos utilizar os seguintes programas:
Node.js (node): O Ambiente de Execução (Runtime Environment) do JavaScript, um kit com tudo que precisamos, desde a máquina virtual até o compilador JIT, para desenvolver e executar aplicativos JavaScript sem necessariamente precisar de um navegador web. O Node.js inclui o Node Package Manager (npm), uma ferramenta que permite baixar, instalar e gerenciar pacotes de terceiros.
Git (git): Sistema de controle de versões amplamente utilizado. Ele permite gerenciar diferentes versões do seu projeto e colaborar com outros desenvolvedores. Git registra as mudanças no código em um histórico, facilitando o retorno a estados anteriores do projeto.
Visual Studio Code (vscode): Ambiente de Desenvolvimento Integrado (IDE) poderoso e extensível que integra recursos para editar, depurar, compilar e gerenciar código. Ele possui suporte a extensões (plugins) que ampliam suas funcionalidades, como integração com Node.js e Git.
Se você estiver no Windows, utilizaremos ainda:
Chocolatey (choco): Gerenciador de pacotes para Windows que facilita a instalação de softwares. Ele funciona de maneira similar ao npm, permitindo instalar programas de forma rápida e automatizada.
Para instalar os programas, siga as instruções da seção correspondente ao teu sistema operacional:
Por fazer
Siga uma das seguintes alternativas:
Execute o seguinte comando no terminal como administrador:
Set-ExecutionPolicy RemoteSigned -Scope Process -Force; Invoke-Expression ((New-Object System.Net.WebClient).DownloadString('https://raw.githubusercontent.com/pedrosiqueira/ifmsjs/refs/heads/main/scripts/01_windows_setup.ps1'))
Esse comando executa o script de instalação dos programas para desenvolvimento de Javascript. Se você ficou curioso, pode clicar nesse link e ver o que o script faz.
Instale o Windows Subsystem for Linux (WSL) seguindo as instruções disponíveis aqui. Depois, siga o tutorial de instalação do NodeJS para Windows disponível aqui.
Após a instalação dos programas, vamos configurá-los para otimizar nosso ambiente de desenvolvimento.
Para o git, vamos definir um nome de usuário e email para salvar "snapshots" do progresso do projeto. Recomendamos criar uma conta no GitHub, onde nosso projeto será hospedado, e usá-la para configurar o git.
Para o vscode, vamos instalar as seguintes extensões para nos auxiliar no desenvolvimento do projeto:
Além disso, vamos trocar o npm pelo pnpm, uma alternativa mais rápida e leve ao npm.
Para facilitar o processo de configuração, execute um dos seguintes scripts, conforme teu sistema operacional:
Por fazer
Invoke-Expression ((New-Object System.Net.WebClient).DownloadString('https://raw.githubusercontent.com/pedrosiqueira/ifmsjs/refs/heads/main/scripts/02_alg_project_setup.ps1'))
Esse script também baixa o esqueleto inicial do nosso projeto do GitHub e o abre no vscode.
Agora estamos prontos para começar!